Bulb switcher II

Time: O(1); Space: O(1); medium

There is a room with N lights which are turned on initially and 4 buttons on the wall. After performing exactly M unknown operations towards buttons, you need to return how many different kinds of status of the N lights could be.

Suppose N lights are labeled as number [1, 2, 3 …, N], function of these 4 buttons are given below:

  1. Flip all the lights.

  2. Flip lights with even numbers.

  3. Flip lights with odd numbers.

  4. Flip lights with (3k + 1) numbers, k = 0, 1, 2, …

Example 1:

Input: n = 1, m = 1

Output: 2

Explanation:

  • Status can be: [on], [off]

Example 2:

Input: n = 2, m = 1

Output: 3

Explanation:

  • Status can be: [on, off], [off, on], [off, off]

Example 3:

Input: n = 3, m = 1

Output: 4

Explanation:

  • Status can be: [off, on, off], [on, off, on], [off, off, off], [off, on, on].

[1]:
class Solution1(object):
    def flipLights(self, n, m) -> int:
        """
        :type n: int
        :type m: int
        :rtype: int
        """
        if m == 0:            return 1
        if n == 1:            return 2
        if m == 1 and n == 2: return 3
        if m == 1 or  n == 2: return 4
        if m == 2:            return 7
        return 8
[2]:
s = Solution1()
n, m = 1, 1
assert s.flipLights(n, m) == 2
n, m = 2, 1
assert s.flipLights(n, m) == 3
n, m = 3, 1
assert s.flipLights(n, m) == 4